home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
NetNews Offline 2
/
NetNews Offline Volume 2.iso
/
news
/
comp
/
std
/
c
/
46
< prev
next >
Wrap
Internet Message Format
|
1996-08-06
|
1KB
Path: teal.csn.net!not-for-mail
From: thads@csn.net (Thad Smith)
Newsgroups: comp.std.c
Subject: Re: Undefined result vs. int's holding undefined values.
Date: 7 Jan 1996 15:41:47 -0700
Organization: T3 Systems
Message-ID: <oZA8wQ9ytpjN084yn@csn.net>
References: <4ck70b$rd7@news.informix.com> <4ckms5$rd7@news.informix.com>
<4cmg0s$1mb@der.twinsun.com>
Reply-To: ThadSmith@acm.org
NNTP-Posting-Host: 199.117.27.22
In article <4cmg0s$1mb@der.twinsun.com>,
eggert@twinsun.com (Paul Eggert) wrote:
>This reminds me of a similar bug I found a long time ago when porting
>the Modula-3 runtime, which contained code that acted something like this:
>
> int sum_overflow (int x, int y) {
> return (x + y < x) != (y < 0);
> }
>
>The C Standard does not guarantee that the above function works,
>since integer overflow leads to undefined behavior,
>but when I found that the function did not work with whatever old version
>of GCC I was using at the time, I reported it as a bug to the GCC maintainers
>and got a fix from them in a few days.
>
>Regardless of what the C Standard says, it should be obvious that it's
>crucial to have integer overflow checking working properly in an
>application that needs it.
I agree, but it is possible to rewrite the function so that it doesn't
invoke undefined behavior:
#include <limits.h>
int sum_overflow (int x, int y) {
return x > 0? (y > INT_MAX - x) : (y < INT_MIN - x);
}
Thad